\documentclass[11pt]{ctexbeamer}
\usetheme{metropolis}


%%%%%%%%%%%% 从 XeTeX 手册代码里抄来的   %%%%%%%%%%%%%
\def\reflect#1{{\setbox0=\hbox{#1}\rlap{\kern0.5\wd0
  \special{x:gsave}\special{x:scale -1 1}}\box0 \special{x:grestore}}}
\def\XeTeX{\leavevmode
  \setbox0=\hbox{X\lower.5ex\hbox{\kern-.15em\reflect{E}}\kern-.1667em \TeX}%
  \dp0=0pt\ht0=0pt\box0 }
\def\XeLaTeX{\leavevmode
  \setbox0=\hbox{X\lower.5ex\hbox{\kern-.15em\reflect{E}}\kern-.0em \LaTeX}%
  \dp0=0pt\ht0=0pt\box0 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\setlength\parskip{1ex}

%%%%%%%%%%%%%%%%%%%%% 字体设置  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setmainfont{CMU Serif}
\setCJKmainfont{SourceHanSansSC-Regular.otf}
\setCJKmonofont{SourceHanSerifSC-Medium.otf}[ BoldFont = SourceHanSerifSC-Bold.otf]
\setCJKsansfont{SourceHanSerifSC-Medium.otf}[ BoldFont = SourceHanSerifSC-Bold.otf]
\setCJKfamilyfont{syht}{SourceHanSansSC-Regular.otf}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\title{{\fontfamily{lmr}\selectfont \LaTeX} 基础知识介绍}
\date{\today}
\author{\texorpdfstring{\CJKfamily{syht} 孙孟越}{孙孟越}}

\begin{document}
\CJKfamily{syht}
\maketitle
\fontfamily{lmr}\linespread{1.3}\selectfont

\begin{frame}{目录}
  \setbeamertemplate{section in toc}[sections numbered]
  \tableofcontents[hideallsubsections]
\end{frame}

\section{\texorpdfstring{{\fontfamily{lmr}\selectfont\TeX}}{TeX} 是什么}

\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont\TeX}}{TeX} 是什么}
\TeX, 是一个由美国计算机教授高德纳 (Donald Ervin Knuth)在 1982 年编写的排版软件.\par
它在学术界特别是数学、物理学和计算机科学界十分流行. \TeX 被普遍认为是一个优秀的排版工具, 尤其是对于复杂数学公式的处理.
\end{frame}


\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont\TeX}}{TeX} 如何工作}
\TeX 程序读取你写的代码, 变成可以打印的文件格式输出. 代码被叫做\TeX 代码, 代码里面掺杂着文本和命令(token).\par
在那个年代, 连PDF格式还没有被发明出. 文件是以DVI格式输出的.\par
\end{frame}


\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont\TeX}}{TeX} 如何使用}
打开记事本程序, 输入一段纯文本.
\begin{verbatim}
Hello, World.
\bye
\end{verbatim}
保存为一个文件, 以~\verb|.tex|~作为后缀.\par
我们这里保存为~\verb|myfile.tex|. 然后在命令行下启动
\begin{verbatim}
tex myfile.tex
\end{verbatim}
就会输出一个~DVI~文件了.
\end{frame}


\begin{frame}{编辑器不是编译器}
\begin{itemize}
  \item 也就是说, 编辑和编译是完全没有关系的事情.
  \item 你可以用你想用的任何编辑器编辑你的~.tex~文件.
  \item 然后, 只需要在命令行下调用\TeX 程序进行编译, 就可以得到输出.
\end{itemize}
\end{frame}


\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont\TeX}}{TeX} 如何使用}
尽管编辑器可以随意选择, 但是现代的编辑器往往有一键编译的功能, 你按一下它的按键, 就帮你自动编译, 非常方便. 而且大部分现代编辑器还有自动补全功能, 大大提升了效率.\par
比如 \TeX Studio, VS Code 等, 都是很优秀的编辑器. 他们都会直接或间接调用\TeX 程序.
\end{frame}


\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont\TeX}}{TeX} 的缺点}
几乎你想要的每一个样式, 都需要通过一条指令告诉\TeX 程序. 这虽然能让你有完全的控制, 但是大大增加了\TeX 使用的门槛. 解决方案是\LaTeX 的诞生.
\end{frame}


\section{\texorpdfstring{{\fontfamily{lmr}\selectfont\LaTeX}}{LaTeX} 是什么}
\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont\LaTeX}}{LaTeX} 是什么}
如果能够把需要的代码包装好, 每次使用的时候只用输入一条短小的命令, 那么使用不就方便多了.\par
正是基于这样的想法, \LaTeX 诞生了.\par
\LaTeX 把常用的\TeX 命令和接口包装了起来, 形成一套更为高级的语言, 可供人们使用. 我们把他们称作文档类/宏包. 你可以在\TeX{} Live 的安装目录下(比较深)找到\LaTeX 的核心代码.
\end{frame}


\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont\LaTeX}}{LaTeX} 怎么编译}
编译器也不是之前的~\verb|tex|~了. 新的编译器叫~\verb|latex|, 这样编译器就知道这个文件是\LaTeX 格式的. 典型的\LaTeX 文件内容是
\begin{verbatim}
\documentclass[a4paper,12pt]{article}
\usepackage{...}

\begin{document}
...
\end{document}
\end{verbatim}
如果保存为~\verb|myfile.tex|, 那么调用~\verb|latex myfile.tex|~即可编译输出.
\end{frame}


\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont\LaTeX}}{LaTeX} 中的宏包}
总结一下, \LaTeX 把\TeX 中很长的口令变成了一个个短小精悍的口令(叫做宏(macro)). 把这些短小精悍的命令放在一起, 就称为``宏包''(package).\par
只要在\TeX 代码中加入~\verb|\usepackage{...}|~就可以调用宏包了.\par
\end{frame}


\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont\LaTeX}}{LaTeX} 中的宏包}
其实, 当你调用~\verb|\usepackage{FOO}|~的时候, \LaTeX 程序帮你做的事情就是加载了一个叫~\verb|FOO.sty|~的文件罢了. 这个文件的语法也遵循\LaTeX 格式.\par
所以, 你完全可以设计自己的~\verb|.sty|~文件, 然后通过~\verb|\usepackage{...}|~调用它, 尽管这没有必要.\par
你也可以动手修改别人提供的宏包, 只要你找到并打开宏包的文件.
\end{frame}


\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont\LaTeX}}{LaTeX} 中的环境}
比如说当我们遇到几行需要居中的时候. 你得修改一些对齐的设置, 用完了再修改回去. 这种事情每次都做的话太复杂了, 我们就引入了``环境''(environment)的概念.
\begin{verbatim}
\begin{FOO} % 修改一些设置

\end{FOO} % 用好了改回去
\end{verbatim}
环境在\LaTeX 代码中非常常见, 比如常见的~\verb|equation,align,center,table|~环境等等.
\end{frame}

\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont\LaTeX}}{LaTeX} 中的环境}
你也可以自己定义一个环境, 也就是说如果你每次需要先改一些设置, 然后再改回去, 那么就很适合自己定义一个环境.
\end{frame}



\section{现代的\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX}}{TeX} 引擎}
\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont PDF\TeX}}{pdfTeX} 是什么}
后来出现的~PDF~格式, 成为了最流行的文档格式.\par
于是, \verb|tex|~和~\verb|latex|~终于分别升级到了~\verb|pdftex|~和~\verb|pdflatex|. 不会再输出~DVI~了.
\end{frame}


\begin{frame}[fragile,allowframebreaks]{更多拓展}
摘录自 \TeX{} Live 手册.
\begin{description}
\item [$\epsilon$-\TeX] 为 \TeX\ 增加了一套新的原语. (包括宏展开, 字符扫描, mark 的分类, 额外的调试功能等)

\item [pdf\TeX] 在 $\epsilon$-\TeX\ 扩展的基础上构建, 在 DVI 输出之外增加对
PDF 输出的支持, 以及许多其他的扩展. 它的主页在 \url{http://www.pdftex.org/}.

\item  [Lua\TeX] 是 pdf\TeX\ 指定的后继者,而且对 pdf\TeX\ 保持大部分
(但不是完全地) 向下兼容. 它内置的 Lua 语言解释器 (\url{https://lua.org}) 为许多棘手的 \TeX{}
问题提供了优雅的解决方案. 当以~\verb|texlua|~命令执行时, 它就像一个标准的~Lua~解释器一样工作.
见 \url{http://www.luatex.org}.

\item [\XeTeX] 通过第三方库, 增加对 Unicode 输入文本和 OpenType 字体的支持, 能够直接使用系统字体. 参见 \url{https://tug.org/xetex}.
\end{description}
相应地, 这些引擎有对应的 Plain \TeX 和 \LaTeX 格式的命令, 分别表明预加载的格式是~Plain \TeX 或 \LaTeX. 比如 \XeTeX 引擎就有~\verb|xetex|~和~\verb|xelatex|~两个命令.
\end{frame}


\section{\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX{} Live}}{TeXLive} 是什么}
\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX{} Live}}{TeXLive} 是什么}
\TeX{} Live 是\TeX 的发行版, 包括了
\begin{itemize}
  \item \TeX
  \item \LaTeXe
  \item Con\TeX t
  \item Bib\TeX
\end{itemize}等五百多个可执行程序, 还有上千个
宏包, 以及许多字体和文档, 并支持世界上许多不同的语言.
\end{frame}

\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX{} Live}}{TeXLive} 怎么安装}
可以在线安装, 也可以下载完整的镜像进行安装.\par
\url{https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/}
\end{frame}

\begin{frame}{\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX{} Live}}{TeXLive} 怎么用}
\begin{itemize}
  \item 把可执行程序直接在命令行调用即可.
  \item 也可以把这条命令告诉你的编辑软件, 比如 VSCode 等.\par
        那样你的编辑软件就可以调用它了.\par
        编译器会自己调用随\TeX{} Live 安装的字体和宏包.
  \item 当然, 如果你愿意, 你也可以开发自己的宏包.
\end{itemize}
\end{frame}



\begin{frame}[fragile]{如何升级\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX{} Live}}{TeXLive} 的宏包}
宏包作者是会不定期更新的. 通过\TeX{} Live 附带的 tlmgr 可以升级宏包.\par
安装完\TeX{} Live 后, 只需在命令行下输入
\begin{verbatim}
tlmgr update --all --self
\end{verbatim}
即可升级宏包.
\end{frame}

\begin{frame}[fragile]{如何使用\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX{} Live}}{TeXLive} 的宏包手册}
安装完\TeX{} Live 后, 只需在命令行下输入
\begin{verbatim}
texdoc ctex
\end{verbatim}
即可打开~\verb|ctex|~宏包的文档. 其余宏包的文档也类似.
\end{frame}

\section{中文\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX}}{TeX} 方案}
\begin{frame}{什么是\texorpdfstring{{\fontfamily{lmr}\selectfont C\TeX}}{CTeX}套装}
\onslide<1->{C\TeX 中文套装是基于Windows下的MiK\TeX 系统, 集成了编辑器WinEdt和PostScript处理软件Ghostscript和GSview等主要工具. C\TeX 中文套装在 MiK\TeX 的基础上增加了对中文的完整支持. C\TeX 中文套装支持 CJK, xeCJK, CCT, TY 等多种中文 \TeX 处理方式.\par}
\onslide<2->{简单地说, 就是对\TeX 的发行版Mik\TeX 加入了中文支持, 再打包了一个好用的编辑器.}
\end{frame}

\begin{frame}{为什么\texorpdfstring{{\fontfamily{lmr}\selectfont C\TeX}}{CTeX}套装应该被抛弃}
\begin{itemize}[<+->]
  \item C\TeX 套装中的中文处理方案已经大大过时. 现在有更好的处理方案. 现在可以从 \TeX 层面支持支持汉字.
  \item C\TeX 套装中的被打包编辑器WinEdt, 默认使用 GBK 编码格式, 而不是现在更流行的 UTF-8 格式, 打开别人的文件有可能出现乱码.
  \item C\TeX 套装中的宏包无法更新, 有很多新功能享受不了, 老功能有时候会有 bug.
  \item C\TeX 套装中被打包的编辑器WinEdt是盗版软件.
\end{itemize}
\end{frame}

\begin{frame}[fragile]{现代的中文\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX}}{TeX}方案}
我们可以用~\verb|ctex|~宏包. 比如这样
\begin{verbatim}
\documentclass[a4paper,12pt]{article}
\usepackage{ctex}

\begin{document}
汉字
\end{document}
\end{verbatim}
保存成UTF-8格式的文本文件, 然后使用 \XeLaTeX 或者 Lua\LaTeX 进行编译.\par
也就是调用~\verb|xelatex|~或~\verb|lualatex|~进行编译.
\end{frame}


\begin{frame}[fragile]{现代的中文\texorpdfstring{{\fontfamily{lmr}\selectfont \TeX}}{TeX}方案}
或者这样.
\begin{verbatim}
\documentclass[a4paper,12pt]{ctexart}

\begin{document}
汉字
\end{document}
\end{verbatim}
保存成UTF-8格式的文本文件, 然后使用 \XeLaTeX 或者 Lua\LaTeX 进行编译.
\end{frame}

\section{有关\texorpdfstring{{\fontfamily{lmr}\selectfont \LaTeX}}{LaTeX} 编译的一些杂项}
\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont \XeLaTeX}}{XeLaTeX} 细致介绍}
我们现在假设有一个~\verb|a.tex|~文件, 我们需要用\XeLaTeX 对它进行编译.\par
最简单的方法就是~\verb|xelatex a.tex|\par
不过, 我们可以加一些参数. 比如加上~\verb|-etex|~选项, 就可以打开~$\epsilon$-\TeX 拓展.\par
即~\verb|xelatex -etex a.tex|
\end{frame}

\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont \XeLaTeX}}{XeLaTeX} 细致介绍}
最常用的是加上~\verb|-interaction=|~选项, 可以选择互动模式. 比如选择了 errorstopmode, 遇到错就停下来, nonstopmode 就强行编译下去.\par
还有一个就是~\verb|-synctex=NUMBER|~选项, 可以生成~Sync\TeX 数据.
\end{frame}

\begin{frame}[fragile]{\texorpdfstring{{\fontfamily{lmr}\selectfont Sync\TeX}}{SyncTeX} 是什么}
Sync\TeX 是一个程序, 用来提供正向/反向查找的支持. 其原理就是, 在输出 PDF 的时候会记录下源码, 和这段源码对应的PDF的位置数据.\par
这些位置信息会记录在~.synctex 文件中. 有了它, 就可以快速地查找了.\par
有时候, .synctex~会被再~gzip~压缩一次, 变成~.synctex.gz 文件.
\end{frame}

\begin{frame}[fragile,allowframebreaks]{\texorpdfstring{{\fontfamily{lmr}\selectfont \XeLaTeX}}{XeLaTeX} 生成的其他文件是什么}
.log 文件是编译日志, 会记录详细的报错信息.\par
而~.aux~则是重要的辅助文件. 首先, \TeX 程序是只能从前往后读代码的, 所以每条命令只能和它前面的命令互动.\par
如果一条命令想读取它后面的东西怎么办? 那就先空着, 把信息写入~.aux~辅助文件(auxiliary file), 然后第二次编译的时候再从~.aux~读取就行了.\par
所以很多地方需要编译至少两遍, 就是这个道理.\par
而且~.aux 也是~\TeX~程序读取代码的一部分, 所以如果第一次生成了~.aux~之后对源代码做改动, 理论上也得对~.aux~进行同步的改动(或者直接删掉).\par
否则有概率报错, 就错在~.aux~文件上.
\end{frame}

\begin{frame}{致谢}
谢谢.\par
作者为清华大学数学系本科 18 级学生.\par
知乎主页: \url{https://www.zhihu.com/people/stevensun-8}
\end{frame}

%%%%%%%%%%%% 赞助商广告 %%%%%%%%%%%%
\begin{frame}{学习和问题都到这里}
\begin{tabular}{cl}
 {\Huge Questions?} & \url{www.latexstudio.net}
\end{tabular}
\centerline{\includegraphics[width=5cm]{gzh.jpg}}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
